import './base_provider.dart';
import '../models/user_model.dart';
import '../models/response/base_response.dart';

/// 认证数据提供者
/// 负责处理登录、注册等认证相关的API请求
class AuthProvider extends BaseProvider {
  
  /// 用户登录
  Future<BaseResponse<Map<String, dynamic>>> login(String email, String password) async {
    // 假设登录成功返回包含 token 和 user 信息的 Map
    // 使用 postRequest 简化请求
    return postRequest<Map<String, dynamic>>(
      '/auth/login', // 登录API端点
      {
        'email': email,
        'password': password,
      },
      // 这里提供一个将 Object? 转换为 Map<String, dynamic> 的函数
      (json) => json as Map<String, dynamic>? ?? {},
    );
  }

  /// 用户注册
  Future<BaseResponse<UserModel>> register(
    String name,
    String email,
    String password,
  ) async {
    return postRequest<UserModel>(
      '/auth/register', // 注册API端点
      {
        'name': name,
        'email': email,
        'password': password,
      },
      // 提供将 Object? 转换为 UserModel 的函数
      (json) => UserModel.fromJson(json as Map<String, dynamic>? ?? {}),
    );
  }
  
  /// 发送密码重置邮件
  Future<BaseResponse<void>> sendPasswordResetEmail(String email) async {
    // 假设此接口成功时不返回数据体 (data: null)
    return postRequest<void>(
      '/auth/forgot-password', // 忘记密码API端点
      {'email': email},
      (_) => null, // 因为 data 是 void，所以转换函数返回 null
    );
  }
  
  /// 刷新Token (示例)
  Future<BaseResponse<String>> refreshToken(String refreshToken) async {
    return postRequest<String>(
      '/auth/refresh-token', // 刷新Token API端点
      {'refreshToken': refreshToken},
      (json) => json as String? ?? '', // 假设返回新的 access token 字符串
    );
  }
  
  /// 退出登录 (示例 - 可能不需要API调用，或调用使Token失效接口)
  Future<BaseResponse<void>> logout(String token) async {
    // 假设调用 API 使 token 失效
    return postRequest<void>(
      '/auth/logout', 
      {},
      (_) => null,
      headers: {'Authorization': 'Bearer $token'}, // 带上认证头
    );
  }
} 